function Base64() {  

    // private property  
    _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";  

    // public method for encoding  
    this.encode = function (input) {  
        var output = "";  
        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;  
        var i = 0;  
        input = _utf8_encode(input);  
        while (i < input.length) {  
            chr1 = input.charCodeAt(i++);  
            chr2 = input.charCodeAt(i++);  
            chr3 = input.charCodeAt(i++);  
            enc1 = chr1 >> 2;  
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);  
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);  
            enc4 = chr3 & 63;  
            if (isNaN(chr2)) {  
                enc3 = enc4 = 64;  
            } else if (isNaN(chr3)) {  
                enc4 = 64;  
            }  
            output = output +  
            _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +  
            _keyStr.charAt(enc3) + _keyStr.charAt(enc4);  
        }  
        return output;  
    }  

    // public method for decoding  
    this.decode = function (input) {  
        var output = "";  
        var chr1, chr2, chr3;  
        var enc1, enc2, enc3, enc4;  
        var i = 0;  
        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");  
        while (i < input.length) {  
            enc1 = _keyStr.indexOf(input.charAt(i++));  
            enc2 = _keyStr.indexOf(input.charAt(i++));  
            enc3 = _keyStr.indexOf(input.charAt(i++));  
            enc4 = _keyStr.indexOf(input.charAt(i++));  
            chr1 = (enc1 << 2) | (enc2 >> 4);  
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);  
            chr3 = ((enc3 & 3) << 6) | enc4;  
            output = output + String.fromCharCode(chr1);  
            if (enc3 != 64) {  
                output = output + String.fromCharCode(chr2);  
            }  
            if (enc4 != 64) {  
                output = output + String.fromCharCode(chr3);  
            }  
        }  
        output = _utf8_decode(output);  
        return output;  
    }  

    // private method for UTF-8 encoding  
    _utf8_encode = function (string) {  
        string = string.replace(/\r\n/g,"\n");  
        var utftext = "";  
        for (var n = 0; n < string.length; n++) {  
            var c = string.charCodeAt(n);  
            if (c < 128) {  
                utftext += String.fromCharCode(c);  
            } else if((c > 127) && (c < 2048)) {  
                utftext += String.fromCharCode((c >> 6) | 192);  
                utftext += String.fromCharCode((c & 63) | 128);  
            } else {  
                utftext += String.fromCharCode((c >> 12) | 224);  
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);  
                utftext += String.fromCharCode((c & 63) | 128);  
            }  

        }  
        return utftext;  
    }  

    // private method for UTF-8 decoding  
    _utf8_decode = function (utftext) {  
        var string = "";  
        var i = 0;  
        var c = c1 = c2 = 0;  
        while ( i < utftext.length ) {  
            c = utftext.charCodeAt(i);  
            if (c < 128) {  
                string += String.fromCharCode(c);  
                i++;  
            } else if((c > 191) && (c < 224)) {  
                c2 = utftext.charCodeAt(i+1);  
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));  
                i += 2;  
            } else {  
                c2 = utftext.charCodeAt(i+1);  
                c3 = utftext.charCodeAt(i+2);  
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));  
                i += 3;  
            }  
        }  
        return string;  
    }  
}
var vm = new Vue({
    el:'#app',
    data(){
        return{
           content:'',
           res:'',
           index:0,
           qrcode:null,
           flag:true
        }
    },
    methods:{
        // 选项切换
        nav_change(val){
            this.index = val
            this.content = ''
            this.res = ''
            if(this.qrcode != null){
                this.qrcode.clear()
                console.log(1)
            }
        },

       // 生成二维码
        makeQRCode() {
            this.flag = true
            if(this.qrcode != null){
                this.qrcode.makeCode(this.content)
            }else{
                this.$nextTick(() => {
                    this.qrcode = new QRCode(document.getElementById("qrcode"), {
                        text: this.content,
                        width: 128,
                        height: 128,
                        colorDark : "#000000",
                        colorLight : "#ffffff",
                        correctLevel : QRCode.CorrectLevel.H
                    });
                })
            }
            // makeCode(text)
            // clear()
        },

        // url编码解码
        url_encode(){
            this.res = encodeURIComponent(this.content)
        },

        url_decode(){
            this.res = decodeURIComponent(this.content)
        },

        // 中文转utf-8
        utf_change(){
            this.res = this.content.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,"&#x$2;")})
        },

        // utf-8转中文
        utf_rechange(){
            this.res = unescape(this.content.replace(/&#x/g,'%u').replace(/\\u/g,'%u').replace(/;/g,''))
        },

        // base64加密
        base_encode(){ 
            var base = new Base64();  
            this.res = base.encode(this.content)
        },

        // base64解密
        base_decode(){
            var base = new Base64();
            this.res = base.decode(this.content);
        },

        // rgb颜色转换
        rgbToHex() {
            var rRgba = /rgba?\((\d{1,3}),(\d{1,3}),(\d{1,3})(,([.\d]+))?\)/,
                r, g, b, a,
                rsa = this.content.replace(/\s+/g, "").match(rRgba);
            if (rsa) {
                r = (+rsa[1]).toString(16);
                r = r.length == 1 ? "0" + r : r;
                g = (+rsa[2]).toString(16);
                g = g.length == 1 ? "0" + g : g;
                b = (+rsa[3]).toString(16);
                b = b.length == 1 ? "0" + b : b;
                a = (+(rsa[5] ? rsa[5] : 1)) * 100
                this.res = "#"+ r + g + b
            } else {
                this.res = this.content
            }
        },
        
        // 十六进制转rgba
        hexToRgba() {
            let hex = this.content
            var hexColor = /^#/.test(hex) ? hex.slice(1) : hex,
                r, g, b;
            hexColor = /^[0-9a-f]{3}|[0-9a-f]{6}$/i.test(hexColor) ? hexColor : 'fffff';
            if (hexColor.length === 3) {
                hexColor = hexColor.replace(/(\w)(\w)(\w)/gi, '$1$1$2$2$3$3');
            }
            r = hexColor.slice(0, 2);
            g = hexColor.slice(2, 4);
            b = hexColor.slice(4, 6);
            r = parseInt(r, 16);
            g = parseInt(g, 16);
            b = parseInt(b, 16);
            // + ', ' + (alp / 100).toFixed(2)
            this.res = 'rgb(' + r + ', ' + g + ', ' + b  + ')'
        },

        // json格式化
        json_parse(){
            this.res =JSON.stringify(this.content,null,'\t')
        },

        // 二维码识别
        upload_pic(e){
            this.flag = false
            $("body").append('<canvas id="qrcanvas" style="display:none;"></canvas>')
            var file = e.target.files[0];
            var that = this
            if(window.FileReader) {
                var fr = new FileReader();
                fr.readAsDataURL(file);
                fr.onloadend = function(res) {
                    var base64Data = res.target.result;
                    that.base64ToqR(base64Data)
                }
            }
        },

        // 生成
        base64ToqR(data) {
            var that = this
            var c = document.getElementById("qrcanvas");
            var ctx = c.getContext("2d");
     
            var img = new Image();
            img.src = data;
            img.onload = function() {
                $("#qrcanvas").attr("width",img.width)
                $("#qrcanvas").attr("height",img.height)
                ctx.drawImage(img, 0, 0, img.width, img.height);
                var imageData = ctx.getImageData(0, 0, img.width, img.height);
                const code = jsQR(imageData.data, imageData.width, imageData.height, {
                    inversionAttempts: "dontInvert",
                });
                if(code){
                    that.res = code.data
                }else{
                    that.res = "识别错误"
                }
            };
        },

        copy(){
            let str = this.res
            this.$nextTick(() => {
                var clip = new ClipboardJS('#copy_dom',{
                    text: function(trigger) {
                        return str
                    }
                })
                clip.on('success',() => {
                    alert('复制成功')
                    clip.destroy()
                })
                clip.on('error',() => {
                    alert('复制失败')
                    clip.destroy()
                })
            })
        }
    },
    created(){
      
    }
})